package com.jiawei.链表;

import java.util.function.Consumer;

/**
 * @author : willian fu
 * @version : 1.0
 */
public interface LinkedList<E>{

    /**
     * 添加一个元素到链表尾节点
     * @param val 待添加的值
     */
    void add(E val);

    /**
     * 添加一个元素到指定位置
     * @param index 索引
     * @param val 值
     */
    void add(int index, E val);

    /**
     * 获取链表尾元素
     * @return
     */
    E get();

    /**
     * 获取头结点开始，指定位置元素
     * @param index
     * @return
     */
    E get(int index);

    /**
     * 返回链表长度
     * @return
     */
    int size();

    /**
     * 删除链表尾元素
     */
    E remove();

    /**
     * 删除从链表头开始指定位置元素
     * @param index
     * @return
     */
    E remove(int index);

    /**
     * 清空链表
     */
    void clear();

    /**
     * 遍历
     * @param action
     */
    void forEach(Consumer<? super E> action);

    void print();

    /**
     * 子节点
     * @param <E>
     */
    interface Node<E>{

        E getValue();

        void addNext(Node<E> next);

        Node<E> next();
    }
}
